//package com.example.lcqexcel.test;
//
//import org.apache.poi.ss.usermodel.CellStyle;
//import org.apache.poi.ss.usermodel.CellType;
//import org.apache.poi.ss.usermodel.FillPatternType;
//import org.apache.poi.ss.usermodel.FormulaEvaluator;
//import org.apache.poi.ss.util.CellRangeAddress;
//import org.apache.poi.xssf.streaming.SXSSFCell;
//import org.apache.poi.xssf.streaming.SXSSFRow;
//import org.apache.poi.xssf.streaming.SXSSFSheet;
//import org.apache.poi.xssf.streaming.SXSSFWorkbook;
//import org.apache.poi.xssf.usermodel.*;
//
///**
// * @ClassName PoiExcelUtils
// * @Description
// * @Author lichuanqi
// * @Date 2021/10/27 13:25
// * @Version 1.0
// **/
//public class XPoiExcelUtils {
//    private XPoiExcelUtils(){}
//    public static void copySheet(SXSSFWorkbook destWorkbook, XSSFSheet fromSheet, SXSSFSheet newSheet, int firstRow, int lastRow) {
//        // 复制一个单元格样式到新建单元格
//        if ((firstRow == -1) || (lastRow == -1) || lastRow < firstRow) {
//            return;
//        }
//        // 复制合并的单元格
//        mergeRegion(fromSheet, newSheet);
//
//        // 设置宽度
//        setColumnWidth(fromSheet, newSheet, firstRow, lastRow);
//
//        // 复制内容
//        copyContent(destWorkbook, fromSheet, newSheet, firstRow, lastRow);
//    }
//
//    private static void copyContent(SXSSFWorkbook destWorkbook, XSSFSheet fromSheet, SXSSFSheet newSheet, int firstRow, int lastRow) {
//        XSSFRow fromRow;
//        SXSSFRow newRow;
//        SXSSFCell newCell;
//        XSSFCell fromCell;
//        // 复制行并填充数据
//        for (int i = 0; i < lastRow; i++) {
//            fromRow = fromSheet.getRow(i);
//            if (fromRow == null) {
//                continue;
//            }
//            newRow = newSheet.createRow(i - firstRow);
//            newRow.setHeight(fromRow.getHeight());
//            for (int j = fromRow.getFirstCellNum(); j <= fromRow.getPhysicalNumberOfCells(); j++) {
//                fromCell = fromRow.getCell((short) j);
//                if (fromCell == null) {
//                    continue;
//                }
//                newCell = newRow.createCell((short) j);
//                CellStyle cellStyle = destWorkbook.createCellStyle();
//                cellStyle.cloneStyleFrom(fromCell.getCellStyle());
//                //cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//                newCell.setCellStyle(cellStyle);
//
//                CellType cType = fromCell.getCellType();
//                switch (cType) {
//                    case STRING:
//                        newCell.setCellValue(fromCell.getRichStringCellValue());
//                        newCell.setCellType(cType);
//                        break;
//                    case NUMERIC:
//                        newCell.setCellValue(fromCell.getNumericCellValue());
//                        newCell.setCellType(cType);
//                        break;
//                    case FORMULA:
//                        newCell.setCellFormula(fromCell.getCellFormula());
//                        break;
//                    case BOOLEAN:
//                        newCell.setCellValue(fromCell.getBooleanCellValue());
//                        newCell.setCellType(cType);
//                        break;
//                    case ERROR:
//                        newCell.setCellValue(fromCell.getErrorCellValue());
//                        newCell.setCellType(cType);
//                        break;
//                    default:
//                        newCell.setCellValue(fromCell.getRichStringCellValue());
//                        newCell.setCellType(cType);
//                        break;
//                }
//            }
//        }
//    }
//
//    private static void setColumnWidth(XSSFSheet fromSheet, SXSSFSheet newSheet, int firstRow, int lastRow) {
//        XSSFRow fromRow;
//        // 设置列宽
//        for (int i = firstRow; i < lastRow; i++) {
//            fromRow = fromSheet.getRow(i);
//            if (fromRow != null) {
//                for (int j = fromRow.getLastCellNum(); j >= fromRow.getFirstCellNum(); j--) {
//                    int colnum = fromSheet.getColumnWidth((short) j);
//                    if (colnum > 100) {
//                        newSheet.setColumnWidth((short) j, (short) colnum);
//                    }
//                    if (colnum == 0) {
//                        newSheet.setColumnHidden((short) j, true);
//                    } else {
//                        newSheet.setColumnHidden((short) j, false);
//                    }
//                }
//                break;
//            }
//        }
//    }
//
//    private static void mergeRegion(XSSFSheet fromSheet, SXSSFSheet newSheet) {
//        CellRangeAddress region = null;
//        for (int i = 0; i < fromSheet.getNumMergedRegions(); i++) {
//            region = fromSheet.getMergedRegion(i);
//            newSheet.addMergedRegion(region);
//        }
//    }
//
//    public static void execAllFormula(SXSSFWorkbook workbook, SXSSFSheet sheet, int firstRow, int lastRow){
//        FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
//        for(int i=firstRow; i<lastRow; i++) {
//            SXSSFRow row = sheet.getRow(i);
//            for(int j=row.getFirstCellNum(); j<row.getLastCellNum(); j++) {
//                SXSSFCell cell = row.getCell(j);
//                if(cell.getCellType() == CellType.FORMULA) {
//                    evaluator.evaluateFormulaCell(cell);
//                }
//            }
//        }
//    }
//}
